package com.qf.drbackend.server.impl;

import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.qf.drbackend.mapper.UserMapper;
import com.qf.drbackend.pojos.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.core.userdetails.UsernameNotFoundException;
import org.springframework.stereotype.Service;

/**
 * 自定义MyUserDetailsService，改变security原本的认证逻辑
 *      原本认证逻辑是按照默认用户名和启动项目时，给的随机密码进行认证的
 *
 *      我们自定义后，通过我们自己的数据库用户信息进行认证
 */
@Service
public class MyUserDetailsService implements UserDetailsService {

    @Autowired
    private UserMapper userMapper;

    //根据用户名，去数据库查询这个用户名对应的用户
    @Override
    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {

        //查询我们自己的数据库
        Wrapper<User> qw = Wrappers.lambdaQuery(User.class).eq(User::getPhone,username);
        User user = userMapper.selectOne(qw);

        if (user != null) {
            //将自己数据库的用户id，封装到security的用户认证对象中
            return org.springframework.security.core.userdetails.User
                    .withUsername(user.getId() + "")
                    //数据库的密码（加密/不加密）
                    .password(user.getPassword())
                    .roles("")
                    .build();
        }

        return null;
    }
}
